﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using DAL.Entity;
using DAL.Persistencia;

namespace NewTierra.Pages.Usuarios
{
    public partial class UsuarioConsulta : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                populaDropPerfil();
                populaGridUsuarios();
            }
        }

        #region Popular Dados

        protected void populaDropPerfil()
        {
            try
            {
                using (NewTierraEntities Con = new NewTierraEntities())
                {
                    ddlPerfilUsuario.DataSource = Con.Usuario_Perfil.ToList();
                    ddlPerfilUsuario.DataTextField = "Perfil_tipo";
                    ddlPerfilUsuario.DataValueField = "Perfil_id";
                    ddlPerfilUsuario.DataBind();

                    ddlPerfilUsuario.Items.Insert(0, new ListItem("Selecione...", "0"));
                }
            }
            catch (Exception ex)
            {
                lblMsgAddUsuario.Text = ex.Message;
            }
        }

        protected void populaGridUsuarios()
        {
            try
            {
                UsuarioDAL u = new UsuarioDAL();
                GridUsuarios.DataSource = u.ListarTodos();
                GridUsuarios.DataBind();
            }
            catch (Exception ex)
            {
                lblMsgAddUsuario.Text = ex.Message;
            }
        }

        #endregion

        #region CRUD Usuarios

        protected void SalvarUsuario(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                {
                    LimpaCampos(this.Controls);
                    lblMsgAddUsuario.Text = "";
                    btnNovoUsuario.Text = "Salvar";
                    Session.Abandon();
                    txtNomeUsuario.Focus();
                    RqSenhaUsuario.Enabled = true;
                    RqSenhaUsuarioRp.Enabled = true;
                    return;
                }

                UsuarioDAL d = new UsuarioDAL();

                if (!ddlPerfilUsuario.SelectedValue.Equals("0"))
                {
                    if (!d.VerificaEmail(txtEmailUsuario.Text))
                    {
                        Usuario u = new Usuario();
                        u.US_nome = txtNomeUsuario.Text;
                        u.Perfil_id = Convert.ToInt32(ddlPerfilUsuario.SelectedValue);
                        u.US_email = txtEmailUsuario.Text;
                        u.US_senha = FormsAuthentication.HashPasswordForStoringInConfigFile
                                                      (txtSenhaUsuario.Text, "MD5");

                        d.Salvar(u);
                        lblMsgAddUsuario.Text = "Usuário cadastrado com sucesso.";
                        LimpaCampos(this.Controls);
                        populaGridUsuarios();
                    }
                    else
                    {
                        lblMsgAddUsuario.Text = "Email já cadastrado, tente outro.";
                    }
                }
                else
                {
                    lblMsgAddUsuario.Text = "Por favor, selecione um perfil.";
                }

            }
            catch (Exception ex)
            {
                lblMsgAddUsuario.Text = ex.Message;
            }

        }

        protected void AtualizarUsuario(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text == "")
                {
                    lblMsgAddUsuario.Text = "Selecione um usuário para ser atualizado.";
                    return;
                }

                UsuarioDAL d = new UsuarioDAL();

                if (!ddlPerfilUsuario.SelectedValue.Equals("0"))
                {
                    Usuario u = new Usuario();

                    u.US_id = Convert.ToInt32(txtCodigo.Text);
                    u.US_nome = txtNomeUsuario.Text;
                    u.Perfil_id = Convert.ToInt32(ddlPerfilUsuario.SelectedValue);
                    u.US_email = txtEmailUsuario.Text;
                    u.US_senha = FormsAuthentication.HashPasswordForStoringInConfigFile
                                                    (txtSenhaUsuario.Text, "MD5");

                    d.Atualizar(u);
                    lblMsgAddUsuario.Text = "Usuário atualizado com sucesso.";
                    populaGridUsuarios();
                }
                else
                {
                    lblMsgAddUsuario.Text = "Por favor, selecione um perfil.";
                }

            }
            catch (Exception ex)
            {
                lblMsgAddUsuario.Text = ex.Message;
            }
        }

        protected void ExcluirUsuario(object sender, EventArgs e)
        {
            try
            {
                UsuarioDAL u = new UsuarioDAL();

                Usuario us = u.ObterPorId(Convert.ToInt32(txtCodigo.Text));
                u.Excluir(us);
                LimpaCampos(this.Controls);
                lblMsgAddUsuario.Text = "Operação realizada com sucesso.";
                populaGridUsuarios();
            }
            catch (Exception ex)
            {
                lblMsgAddUsuario.Text = ex.Message;
            }
        }

        #endregion

        #region Regras

        protected void GridUsuarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                BuscaUsuario(Convert.ToInt32(GridUsuarios.SelectedRow.Cells[0].Text));
            }
            catch (Exception ex)
            {
                lblMsgAddUsuario.Text = ex.Message;
            }
        }

        protected void BuscaUsuario(int IdUsuario)
        {
            try
            {
                UsuarioDAL u = new UsuarioDAL();

                Usuario us = u.ObterPorId(IdUsuario);

                txtCodigo.Text = us.US_id.ToString();
                txtNomeUsuario.Text = us.US_nome;
                txtEmailUsuario.Text = us.US_email;
                ddlPerfilUsuario.SelectedValue = us.Perfil_id.ToString();
                btnNovoUsuario.Text = "Novo";
                lblMsgAddUsuario.Text = "";

                RqSenhaUsuario.Enabled = false;
                RqSenhaUsuarioRp.Enabled = false;
            }
            catch (Exception ex)
            {
                lblMsgAddUsuario.Text = ex.Message;
            }
        }

        protected void ExcluirUsuario(object sender, CommandEventArgs e)
        {
            try
            {
                UsuarioDAL c = new UsuarioDAL();

                int myId = Convert.ToInt32(e.CommandArgument);

                Usuario us = c.ObterPorId(myId);
                c.Excluir(us);
                lblMsgAddUsuario.Text = "Registro excluído com sucesso.";

                populaGridUsuarios();
            }
            catch (Exception ex)
            {
                lblMsgAddUsuario.Text = ex.Message;
            }
        }

        protected void LimpaCampos(ControlCollection controls)
        {
            foreach (Control ctrl in controls)
            {
                if (ctrl is TextBox)
                {
                    (ctrl as TextBox).Text = string.Empty;
                }
                // ... demais controles que queira limpar

                LimpaCampos(ctrl.Controls);
            }
        }

        protected void Limpar(object sender, EventArgs e)
        {
            LimpaCampos(this.Controls);
        }

        #endregion


    }
}